package com.cmic.rcs.emoji.util;

import com.cmic.rcs.emoji.common.Constant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

/**
 * 会话管理工具类
 * 用于处理用户会话相关操作，如强制下线等
 */
@Component
@Slf4j
public class SessionManageUtil {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;

    // Redis键前缀
    private static final String REDIS_APP_LOGIN_KEY_PREFIX = Constant.REDIS_KEY_PREFIX + ":app:login:";

    /**
     * 强制指定手机号的用户下线
     *
     * @param phoneNumber 手机号
     * @return 是否成功下线（如果用户未登录也返回true）
     */
    public boolean forceLogoutByPhone(String phoneNumber) {
        try {
            if (StringUtils.isEmpty(phoneNumber) || !phoneNumber.matches("^\\d{11}$")) {
                log.warn("手机号格式错误: {}", phoneNumber);
                return false;
            }

            String phoneKey = REDIS_APP_LOGIN_KEY_PREFIX + phoneNumber;
            String sessionId = (String) redisTemplate.opsForValue().get(phoneKey);

            if (StringUtils.hasText(sessionId)) {
                // 删除session信息
                redisTemplate.delete(REDIS_APP_LOGIN_KEY_PREFIX + "session:" + sessionId);
                // 删除手机号对应的登录信息
                redisTemplate.delete(phoneKey);
                
                log.info("用户[{}]被强制下线", "******" + phoneNumber.substring(6));
                return true;
            } else {
                log.info("用户[{}]未登录，无需下线", "******" + phoneNumber.substring(6));
                return true;
            }
        } catch (Exception e) {
            log.error("强制下线失败: {}", e.getMessage());
            return false;
        }
    }
}